package com.southwind.controller;

import com.southwind.entity.Admin;
import com.southwind.entity.Sysadmin;
import com.southwind.entity.User;
import com.southwind.form.LoginForm;
import com.southwind.result.LoginResult;
import com.southwind.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
/**
 * 登录控制层，处理用户登录请求及登录结果。
 *
 * @author [Author Name]
 * @since [Date]
 */

@Controller
public class LoginController {

    /**
     * 自动注入LoginService，用于处理登录逻辑。
     */

    @Autowired
    private LoginService loginService;

    /**
     * 处理登录请求。
     * <p>
     * 验证登录表单信息，根据验证结果重定向至不同的页面或返回登录页面附带错误消息。
     *
     * @param loginForm 用户提交的登录表单信息
     * @param model Spring MVC模型对象，用于向视图传递数据
     * @param request HTTP请求对象，用于获取Session
     * @return 重定向的URL字符串或登录页面视图名称
     */

    @PostMapping("/login")
    public String login(LoginForm loginForm, Model model, HttpServletRequest request){
        // 调用登录服务进行验证
        LoginResult result = this.loginService.login(loginForm);
        String url = "";// 初始化返回的URL
        ModelAndView modelAndView = new ModelAndView();
        if(result.getCode().equals(-1) || result.getCode().equals(-2)){
            // 登录失败，返回错误消息至登录页面
            url = "login";
            model.addAttribute("msg", result.getMsg());
        }
        if(result.getCode().equals(0)){
            // 登录成功，根据用户类型设置Session并重定向
            HttpSession session = request.getSession();
            switch (loginForm.getType()){
                case 1:
                    session.setAttribute("user", (User)result.getObject());
                    url = "redirect:/user/index";
                    break;
                case 2:
                    session.setAttribute("admin", (Admin)result.getObject());
                    url = "redirect:/admin/index";
                    break;
                case 3:
                    session.setAttribute("sysadmin", (Sysadmin)result.getObject());
                    url = "redirect:/sysadmin/index";
                    // 如果用户类型不在预期范围内，可考虑添加异常处理或默认行为
                    break;
            }

        }
        return url;// 返回最终处理结果的URL
    }

}
